<?php

namespace app\admin\command;

use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;
use app\admin\model\OcationClass;

class InitOcationClass extends Command
{
    protected function configure()
    {
        $this->setName('ocation_class:init')
            ->setDescription('Initialize ocation class table and import data from community classes')
            ->addOption('force', null, null, '强制重新初始化所有数据');
    }

    protected function execute(Input $input, Output $output)
    {
        try {
            // 检查表是否存在
            $tableExists1 = Db::query("SHOW TABLES LIKE 'fa_ocation_class'");
            $tableExists2 = Db::query("SHOW TABLES LIKE 'fa_ocation_class_course'");
            
            // 正常初始化流程
            $output->writeln("开始初始化教学点班级...");
            
            // 读取SQL文件
            $sqlFile1 = APP_PATH . 'admin/sql/ocation_class.sql';
            $sqlFile2 = APP_PATH . 'admin/sql/ocation_class_course.sql';
            
            if (!file_exists($sqlFile1) || !file_exists($sqlFile2)) {
                $output->writeln("<error>SQL文件不存在</error>");
                return false;
            }

            $sql1 = file_get_contents($sqlFile1);
            $sql2 = file_get_contents($sqlFile2);
            
            // 先删除表（如果存在）
            $output->writeln("删除旧的教学点班级表（如果存在）...");
            Db::execute("DROP TABLE IF EXISTS `fa_ocation_class_course`");
            Db::execute("DROP TABLE IF EXISTS `fa_ocation_class`");
            
            // 执行SQL创建表
            $output->writeln("创建教学点班级表...");
            Db::execute($sql1);
            Db::execute($sql2);
            $output->writeln("<info>教学点班级表创建成功！</info>");
            
            // 如果表已存在且不是强制重新初始化
            if ((!empty($tableExists1) && !empty($tableExists2)) && !$input->getOption('force')) {
                $count = Db::table('fa_ocation_class')->count();
                if ($count > 0) {
                    $output->writeln("<warning>教学点班级表已存在且包含数据，跳过初始化。</warning>");
                    $output->writeln("使用 --force 选项可以强制重新初始化所有数据。");
                    return true;
                }
            }

            // 初始化教学点班级
            $output->writeln("开始从社区班级导入数据...");
            $result = OcationClass::initializeFromCommunityClasses();
            
            if ($result) {
                $count = Db::table('fa_ocation_class')->count();
                $output->writeln("<info>教学点班级初始化成功！共创建了 {$count} 个教学点班级。</info>");
            } else {
                $output->writeln("<error>教学点班级初始化失败！</error>");
                return false;
            }

            $output->writeln("<info>教学点班级初始化完成！</info>");
            return true;
        } catch (\Exception $e) {
            $output->writeln("<error>初始化过程中发生错误: " . $e->getMessage() . "</error>");
            return false;
        }
    }
}